These slides and all other course material can be found at
github.com/brry/rhydro

This is an R Markdown Notebook.
For discussions, please visit the Hydrology in R Facebook group.
Before running the code blocks below, get package installation instructions.


Contents of this workshop


top

Report

Good coding practice, report generation (Rstudio, rmarkdown, R notebook)
Daniel Kotz


top

GIS

Using R as GIS (reading a rainfall shapefile + Kriging, sf + leaflet + mapview + OSMscale)
Berry Boessenkool

Shapefiles

Reading shapefiles with maptools::readShapeSpatial and rgdal::readOGR is obsolete.
Instead, use sf::st_read. sf is on CRAN since oct 2016.
Main reaction when using sf: “Wow, that is fast!”
Download the shapefile or better: download the whole github course repository

rain <- sf::st_read("data/PrecBrandenburg/niederschlag.shp")
Reading layer `niederschlag' from data source `/home/berry/Dropbox/R/rhydro/presentations/data/PrecBrandenburg/niederschlag.shp' using driver `ESRI Shapefile'
converted into: POLYGON
Simple feature collection with 277 features and 1 field
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 3250175 ymin: 5690642 xmax: 3483631 ymax: 5932731
epsg (SRID):    NA
proj4string:    +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs
centroids <- sf::st_centroid(rain)
centroids <- sf::st_coordinates(centroids)

top

Plotting, maps

Static plot:

plot(rain[,1])

Static map:

prj <- sf::st_crs(rain)$proj4string
centroids <- as.data.frame(centroids)
cent_ll <- OSMscale::projectPoints(Y,X, data=centroids, to=OSMscale::pll(), from=prj)
map_static <- OSMscale::pointsMap(y,x, cent_ll, fx=0.08, type="maptoolkit-topo", zoom=6)
Downloading map with extend 11.029332, 14.981464, 51.10418, 53.765423 ...
Done. Now plotting...

Interactive map:

library(leaflet)
cent_ll$info <- paste0(sample(letters,nrow(cent_ll),TRUE), ", ", round(cent_ll$x,2), 
                       ", ", round(cent_ll$y,2))
leaflet(cent_ll) %>% addTiles() %>% addCircleMarkers(lng=~x, lat=~y, popup=~info)

Interactive map of shapefile:

# devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop")
library(berryFunctions) # classify, seqPal
col <- seqPal(n=100, colors=c("red","yellow","blue"))[classify(rain$P1)$index]
mapview::mapview(rain, col.regions=col)

top

Kriging


top

Discharge

River discharge time-series visualisation and extreme value statistics (animation + extremeStat)
Berry Boessenkool


top

Hydmod

Hydrological modelling with airGR
Katie Smith


top

EDA

Exploratory Data Analysis including flow duration curve and trend analysis on time-series
Shaun Harrigan


top

LS0tCnRpdGxlOiAiVXNpbmcgUiBpbiBoeWRyb2xvZ3kgKEVHVTIwMTcgc2hvcnQgY291cnNlKSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIGNvZGVfZm9sZGluZzogbm9uZQogICAgdG9jOiB5ZXMKLS0tCgpUaGVzZSBzbGlkZXMgYW5kIGFsbCBvdGhlciBjb3Vyc2UgbWF0ZXJpYWwgY2FuIGJlIGZvdW5kIGF0ICAKPGZvbnQgc2l6ZT0iNiI+W2dpdGh1Yi5jb20vYnJyeS9yaHlkcm9dKGh0dHBzOi8vZ2l0aHViLmNvbS9icnJ5L3JoeWRybyk8L2ZvbnQ+IAoKVGhpcyBpcyBhbiBbUiBNYXJrZG93biBOb3RlYm9va10oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9yX25vdGVib29rcy5odG1sKS4gIApGb3IgZGlzY3Vzc2lvbnMsIHBsZWFzZSB2aXNpdCB0aGUgCltIeWRyb2xvZ3kgaW4gUiBGYWNlYm9vayBncm91cF0oaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy8xMTMwMjE0Nzc3MTIzOTA5LykuICAKQmVmb3JlIHJ1bm5pbmcgdGhlIGNvZGUgYmxvY2tzIGJlbG93LCBnZXQgW3BhY2thZ2UgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL2Jycnkvcmh5ZHJvI2NoZWNrKS4KClwKCioqQ29udGVudHMgb2YgdGhpcyB3b3Jrc2hvcCoqCgoqIFtHb29kIGNvZGluZyBwcmFjdGljZSwgcmVwb3J0IGdlbmVyYXRpb25dKCNyZXBvcnQpIChSc3R1ZGlvLCBgcm1hcmtkb3duYCwgUiBub3RlYm9vaykKKiBbVXNpbmcgUiBhcyBHSVNdKCNnaXMpIChyZWFkaW5nIGEgcmFpbmZhbGwgc2hhcGVmaWxlICsgS3JpZ2luZywgYHNmYCArIGBsZWFmbGV0YCArIGBtYXB2aWV3YCArIGBPU01zY2FsZWApCiogW1JpdmVyIGRpc2NoYXJnZSB0aW1lLXNlcmllc10oI2Rpc2NoYXJnZSkgdmlzdWFsaXNhdGlvbiBhbmQgZXh0cmVtZSB2YWx1ZSBzdGF0aXN0aWNzIChgYW5pbWF0aW9uYCArIGBleHRyZW1lU3RhdGApCiogW0h5ZHJvbG9naWNhbCBtb2RlbGxpbmddKCNoeWRtb2QpIHdpdGggYGFpckdSYAoqIFtFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzXSgjZWRhKSBpbmNsdWRpbmcgZmxvdyBkdXJhdGlvbiBjdXJ2ZSBhbmQgdHJlbmQgYW5hbHlzaXMgb24gdGltZS1zZXJpZXMKClwKW3RvcF0oI3RvcCkKCiMgUmVwb3J0Ckdvb2QgY29kaW5nIHByYWN0aWNlLCBbcmVwb3J0IGdlbmVyYXRpb25dKCNyZXBvcnQpIChSc3R1ZGlvLCBgcm1hcmtkb3duYCwgUiBub3RlYm9vaykgIAoqKkRhbmllbCBLb3R6KioKClwKW3RvcF0oI3RvcCkKCiMgR0lTClVzaW5nIFIgYXMgR0lTIChyZWFkaW5nIGEgcmFpbmZhbGwgc2hhcGVmaWxlICsgS3JpZ2luZywgYHNmYCArIGBsZWFmbGV0YCArIGBtYXB2aWV3YCArIGBPU01zY2FsZWApICAKKipCZXJyeSBCb2Vzc2Vua29vbCoqCgojIyMgU2hhcGVmaWxlcwoKUmVhZGluZyBzaGFwZWZpbGVzIHdpdGggYG1hcHRvb2xzOjpyZWFkU2hhcGVTcGF0aWFsYCBhbmQgYHJnZGFsOjpyZWFkT0dSYCBpcyBvYnNvbGV0ZS4gIApJbnN0ZWFkLCB1c2UgYHNmOjpzdF9yZWFkYC4gYHNmYCBpcyBvbiBDUkFOIHNpbmNlIG9jdCAyMDE2LiAgCk1haW4gcmVhY3Rpb24gd2hlbiB1c2luZyBzZjogIldvdywgdGhhdCBpcyBmYXN0ISIgIApbRG93bmxvYWQgdGhlIHNoYXBlZmlsZV0oaHR0cHM6Ly9taW5oYXNrYW1hbC5naXRodWIuaW8vRG93bkdpdC8jL2hvbWU/dXJsPWh0dHBzOi8vZ2l0aHViLmNvbS9icnJ5L3JoeWRyby90cmVlL21hc3Rlci9wcmVzZW50YXRpb25zL2RhdGEvUHJlY0JyYW5kZW5idXJnKSAKb3IgYmV0dGVyOiBbZG93bmxvYWQgdGhlIHdob2xlIGdpdGh1YiBjb3Vyc2UgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2Jycnkvcmh5ZHJvL2FyY2hpdmUvbWFzdGVyLnppcCkKCmBgYHtyfQpyYWluIDwtIHNmOjpzdF9yZWFkKCJkYXRhL1ByZWNCcmFuZGVuYnVyZy9uaWVkZXJzY2hsYWcuc2hwIikKY2VudHJvaWRzIDwtIHNmOjpzdF9jZW50cm9pZChyYWluKQpjZW50cm9pZHMgPC0gc2Y6OnN0X2Nvb3JkaW5hdGVzKGNlbnRyb2lkcykKYGBgCgpbdG9wXSgjdG9wKQoKIyMjIFBsb3R0aW5nLCBtYXBzCgpTdGF0aWMgcGxvdDoKYGBge3J9CnBsb3QocmFpblssMV0pCmBgYAoKU3RhdGljIG1hcDoKYGBge3J9CnByaiA8LSBzZjo6c3RfY3JzKHJhaW4pJHByb2o0c3RyaW5nCmNlbnRyb2lkcyA8LSBhcy5kYXRhLmZyYW1lKGNlbnRyb2lkcykKY2VudF9sbCA8LSBPU01zY2FsZTo6cHJvamVjdFBvaW50cyhZLFgsIGRhdGE9Y2VudHJvaWRzLCB0bz1PU01zY2FsZTo6cGxsKCksIGZyb209cHJqKQptYXBfc3RhdGljIDwtIE9TTXNjYWxlOjpwb2ludHNNYXAoeSx4LCBjZW50X2xsLCBmeD0wLjA4LCB0eXBlPSJtYXB0b29sa2l0LXRvcG8iLCB6b29tPTYpCmBgYAoKSW50ZXJhY3RpdmUgbWFwOgpgYGB7cn0KbGlicmFyeShsZWFmbGV0KQpjZW50X2xsJGluZm8gPC0gcGFzdGUwKHNhbXBsZShsZXR0ZXJzLG5yb3coY2VudF9sbCksVFJVRSksICIsICIsIHJvdW5kKGNlbnRfbGwkeCwyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIiwgIiwgcm91bmQoY2VudF9sbCR5LDIpKQpsZWFmbGV0KGNlbnRfbGwpICU+JSBhZGRUaWxlcygpICU+JSBhZGRDaXJjbGVNYXJrZXJzKGxuZz1+eCwgbGF0PX55LCBwb3B1cD1+aW5mbykKYGBgCgpJbnRlcmFjdGl2ZSBtYXAgb2Ygc2hhcGVmaWxlOgpgYGB7cn0KIyBkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoImVudmlyb25tZW50YWxpbmZvcm1hdGljcy1tYXJidXJnL21hcHZpZXciLCByZWYgPSAiZGV2ZWxvcCIpCmxpYnJhcnkoYmVycnlGdW5jdGlvbnMpICMgY2xhc3NpZnksIHNlcVBhbApjb2wgPC0gc2VxUGFsKG49MTAwLCBjb2xvcnM9YygicmVkIiwieWVsbG93IiwiYmx1ZSIpKVtjbGFzc2lmeShyYWluJFAxKSRpbmRleF0KbWFwdmlldzo6bWFwdmlldyhyYWluLCBjb2wucmVnaW9ucz1jb2wpCmBgYAoKW3RvcF0oI3RvcCkKCiMjIyBLcmlnaW5nCgoKXApbdG9wXSgjdG9wKQoKIyBEaXNjaGFyZ2UKUml2ZXIgZGlzY2hhcmdlIHRpbWUtc2VyaWVzIHZpc3VhbGlzYXRpb24gYW5kIGV4dHJlbWUgdmFsdWUgc3RhdGlzdGljcyAoYGFuaW1hdGlvbmAgKyBgZXh0cmVtZVN0YXRgKSAgCioqQmVycnkgQm9lc3Nlbmtvb2wqKgoKXApbdG9wXSgjdG9wKQoKIyBIeWRtb2QKSHlkcm9sb2dpY2FsIG1vZGVsbGluZyB3aXRoIGBhaXJHUmAgICAKKipLYXRpZSBTbWl0aCoqCgpcClt0b3BdKCN0b3ApCgojIEVEQQpFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIGluY2x1ZGluZyBmbG93IGR1cmF0aW9uIGN1cnZlIGFuZCB0cmVuZCBhbmFseXNpcyBvbiB0aW1lLXNlcmllcyAgIAoqKlNoYXVuIEhhcnJpZ2FuKioKClwKW3RvcF0oI3RvcCkK